/**
 * 如果使用Flash大小为256K的芯片addr请设为 0x0803E000
如果使用Flash大小为128K的芯片addr请设为 0x0801F000
如果使用Flash大小为64K的芯片addr请设为 0x08007000
 */

#include "main.h"
#include <stdio.h>

extern UART_HandleTypeDef huart1;
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
// int fputc(int ch, FILE *f)
// {
//     HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1, 0xFFFF);
//     return ch;
// }

uint32_t WriteFlashData = 0x12345678;
uint32_t addr = 0x08007000; // 0x0807E000;

/*FLASH写入程序*/
void writeFlashTest(void)
{
	/* 1/4解锁FLASH*/
	HAL_FLASH_Unlock();

	/* 2/4擦除FLASH*/
	/*初始化 FLASH_EraseInitTypeDef*/
	/*擦除方式,页擦除FLASH_TYPEERASE_PAGES，块擦除FLASH_TYPEERASE_MASSERASE*/
	/*擦除页数*/
	/*擦除地址*/
	FLASH_EraseInitTypeDef FlashSet;
	FlashSet.TypeErase = FLASH_TYPEERASE_PAGES;
	FlashSet.PageAddress = addr;
	FlashSet.NbPages = 1;

	/*设置PageError，调用擦除函数*/
	uint32_t PageError = 0;
	HAL_FLASHEx_Erase(&FlashSet, &PageError);

	/* 3/4对FLASH烧写*/
	HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr, WriteFlashData);

	/* 4/4锁住FLASH*/
	HAL_FLASH_Lock();
}

/*FLASH读取打印程序*/
uint32_t rom_data;
void printFlashTest(void)
{
	rom_data = *(__IO uint32_t *)(addr);

	printf("addr is:0x%x, data is:0x%x\r\n", addr, rom_data);
}
/* USER CODE END 0 */
